USE [Estoque]
GO

/****** Object:  StoredProcedure [dbo].[usp_RelatorioNecessidades]    Script Date: 10/24/2010 23:30:24 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

alter procedure [dbo].[usp_RelatorioNecessidades]
	@DataFim datetime
AS
begin

--declare @Estoque table (
--	Produto_Id int,
--	Qtde int)
	
--declare @PedidoCompra table (
--	Produto_Id int,
--	Qtde int)

--insert into @Estoque 
--select Produto_Id, sum(case Tipo when 'E' then Qtde when 'S' then Qtde*-1 end) as Qtde from Estoque 
--where Dt_Operacao <= @DataFim
--group by Produto_Id

--insert into @PedidoCompra
--select pcp.Produto_Id,sum(case pc.Tipo when 'E' then Qtde when 'S' then Qtde*-1 end) as Qtde
--from Pedido_Produtos pcp inner join Pedidos pc 
--on pc.Id = pcp.Pedido_Id
--where [Status] = 'A' and Dt_Pedido <= @DataFim
--group by Produto_Id

Select  p.Id, 
		p.Nome,
		p.Estoque_Minimo - Sum(Isnull(case e.Tipo when 'E' then e.Qtde when 'S' then e.Qtde*-1 end,0)) +
		sum(IsNull(case pc.Tipo when 'E' then pcp.Qtde when 'S' then pcp.Qtde*-1 end,0)) as Qtde, 
		isnull(cast(pcd.DT_Pedido as varchar(10)),'') as DT_Pedido from Produtos p
left join Estoque e 
on e.Produto_Id = p.Id and e.Dt_Operacao <= @DataFim
left join (select top 1 pcp.Produto_Id, pc.Dt_Pedido from Pedidos pc
	inner join Pedido_Produtos pcp
	on pcp.Pedido_Id = pc.Id
	where pc.Dt_Pedido <= @DataFim
	order by pc.Dt_Pedido Desc) pcd
on pcd.Produto_Id = p.Id
left join Pedido_Produtos pcp 
on pcp.Produto_Id = p.Id
left join Pedidos pc 
on pc.Id = pcp.Pedido_Id and [Status] = 'A' and pc.Dt_Pedido <= @DataFim

group by p.Id,p.Nome,p.Estoque_Minimo,pcd.DT_Pedido
having 	(	p.Estoque_Minimo - Sum(Isnull(case e.Tipo when 'E' then e.Qtde when 'S' then e.Qtde*-1 end,0)) +
		sum(IsNull(case pc.Tipo when 'E' then pcp.Qtde when 'S' then pcp.Qtde*-1 end,0))
        ) > 0
        

end
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

alter procedure [dbo].[usp_RelatorioEstoque]
	@DataIni datetime,
	@DataFim datetime
AS
begin

declare @PedidoCompra table (
	Produto_Id int,
	Qtde int,
	Tipo char(1),
	[Status] char(1))
	
insert into @PedidoCompra
select pcp.Produto_Id,isnull(sum(Qtde),0) as Qtde, Tipo , [Status]
from Pedido_Produtos pcp inner join Pedidos pc 
on pc.Id = pcp.Pedido_Id
where Dt_Pedido between @DataIni and @DataFim
group by Produto_Id, Tipo, [Status]

Select p.Id, 
	   p.Nome, 
	   ISnull(Sum(case e.Tipo when 'E' then e.Qtde when 'S' then e.Qtde*-1 end),0) as QtdeEstoque,
	   isnull(sum(pcs.Qtde),0) as SolicitadaCompra,
	   isnull(sum(pcv.Qtde),0) as SolicitadaVenda,
	   isnull(sum(prc.Qtde),0) as RealizadaCompra,
	   isnull(sum(prv.Qtde),0) as RealizadaVenda
from Produtos p
left join Estoque e 
on e.Produto_Id = p.Id
left join @PedidoCompra pcs 
on pcs.Produto_Id = p.Id and pcs.Tipo = 'E'
left join @PedidoCompra pcv
on pcv.Produto_Id = p.Id and pcv.Tipo = 'S'
left join @PedidoCompra prc
on prc.Produto_Id = p.Id and prc.Tipo = 'E' and prc.[Status] = 'F'
left join @PedidoCompra prv
on prv.Produto_Id = p.Id and prv.Tipo = 'S' and prv.[Status] = 'F'
where e.Dt_Operacao between @DataIni and @DataFim
group by p.Id,p.Nome

end

GO

/****** Object:  View [dbo].[vw_RelatorioNecessidades]    Script Date: 10/24/2010 23:30:16 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


alter view [dbo].[vw_RelatorioNecessidades]
as

Select 0 as Id, '' as Nome, 0 as Qtde, '' as DT_Pedido 

GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


alter view [dbo].[vw_RelatorioEstoque]
as

Select 0 as Id,'' as Nome, 0 as QtdeEstoque,0 as SolicitadaCompra,0 as SolicitadaVenda, 0 as RealizadaCompra,
0 as RealizadaVenda



GO
